08. If条件语句-制作交易条件单

本章概要

  • 学习材料:中性数值、假设上下界和趋势/成交量/RSI课堂条件。
  • 本章任务:运行 lst-multi-condition-decision,用 if/elif/else 形成互斥核对状态。
  • 完成后你将得到:条件真值表、最终状态和命中分支。
  • 自我检查:测试阈值两侧与等号点;输入缺失或规则重叠时先检查原因。
  • 拓展练习:把同一分支结构拓展应用到中国股票风控提醒。

条件判断在金融状态判断顺序中的作用

在金融交易和风险管理中,几乎所有的决策都基于条件判断:

  • 数值是否越过已声明的测试边界?
  • 输入是否缺失、过期或超出允许范围?
  • 当前记录应进入哪个核对队列?

条件判断实现了程序的选择性执行(Selective Execution),是图灵完备性的关键要素之一。

If语句的三种基本结构

Python的if语句使用缩进来组织代码块:

结构 用途 分支数
if 单分支条件判断 1
if-else 双分支条件判断 2
if-elif-else 多分支条件判断 多个

示例:If语句三种结构

Listing 1: If条件语句的基本语法
展开完整代码
# =============================================================================
# 题目:If条件语句的基本语法演示
# =============================================================================
# 本代码块展示了Python中if语句的三种基本结构:
# 1. 简单if语句 - 单分支条件判断
# 2. if-else结构 - 双分支条件判断
# 3. if-elif-else结构 - 多分支条件判断
# 这些结构是金融交易决策系统的基础,用于根据市场价格做出不同的操作决策

# ==================== 示例1:简单的if语句 ====================
price = 15.50  # 定义当前股票价格为15.50元

if price > 15.0:  # 判断数值是否高于课堂假设边界
    print("ABOVE_ASSUMED_THRESHOLD")  # 只输出中性状态
    # 注意:缩进表示代码块 - Python使用4个空格缩进来表示代码块的层次
    print("进入REVIEW队列")  # 由人工核对而非自动行动

# ==================== 示例2:if-else结构 ====================
if price > 20.0:  # 判断价格是否高于20元
    action = "RULE_A"  # 如果高于20元,记录规则A
else:  # 否则(价格不高于20元)
    action = "REVIEW"  # 否则进入核对状态

print(f"规则状态: {action}")  # 输出中性规则状态

# ==================== 示例3:if-elif-else结构(多重条件) ====================
if price > 20.0:  # 第一个条件:价格高于20元
    level = "ABOVE_20"  # 记录数值区间
elif price > 15.0:  # 第二个条件:价格高于15元但不高于20元(elif=else if)
    level = "ABOVE_15"  # 记录数值区间
elif price > 10.0:  # 第三个条件:价格高于10元但不高于15元
    level = "ABOVE_10"  # 记录数值区间
else:  # 最后的情况:价格不高于10元
    level = "AT_OR_BELOW_10"  # 记录数值区间

print(f"区间标签: {level}")  # 输出中性区间标签
ABOVE_ASSUMED_THRESHOLD
进入REVIEW队列
规则状态: REVIEW
区间标签: ABOVE_15

If语句的语法规则

记住以下五个要点

  1. 关键字ifelifelse
  2. 条件表达式:返回布尔值的表达式
  3. 冒号:每个条件后必须有 :
  4. 缩进:统一使用4个空格
  5. 分支数量elif 可以有多个,else 最多一个

比较运算符一览

运算符 描述 示例 结果
== 等于 10 == 10 True
!= 不等于 10 != 5 True
< 小于 5 < 10 True
> 大于 10 > 5 True
<= 小于等于 5 <= 5 True
>= 大于等于 10 >= 10 True

比较运算符的金融应用

Listing 2: 比较运算符在金融条件判断中的应用
展开完整代码
# =============================================================================
# 题目:比较运算符在交易决策中的应用
# =============================================================================
# 本代码演示如何在金融场景中使用比较运算符构建交易条件:
# - 使用>=判断是否达到止盈目标价
# - 使用<=判断是否满足条件止损
# - 结合多个比较运算符制定仓位管理策略
# 输出将展示基于当前价格的操作建议

# ==================== 定义交易参数 ====================
price = 18.50  # 当前股票价格
target_price = 20.00  # 目标止盈价格
stop_loss = 15.00  # 止损价格

# ==================== 基本比较:止盈判断 ====================
if price >= target_price:  # 判断当前价是否达到或超过目标价
    print("ALERT: 达到课堂目标价,进入人工核对")  # 仅输出教学预警状态

# ==================== 基本比较:止损判断 ====================
if price <= stop_loss:  # 判断当前价是否触及或跌破止损价
    print("ALERT: 触及课堂止损线,进入风控核对")  # 不自动生成交易指令

# ==================== 多重条件:仓位管理 ====================
if price < stop_loss:  # 如果价格低于止损价
    position = "REVIEW_STOP_LOSS"  # 标记待核对状态而非真实仓位指令
elif price < target_price:  # 如果价格在止损价和目标价之间
    position = "REVIEW_RANGE"  # 标记区间状态
else:  # 如果价格高于或等于目标价
    position = "REVIEW_TARGET"  # 标记目标价状态

print(f"当前状态: {position}")  # 输出中性规则状态
# 输出只验证区间分支,不构成仓位或交易建议
当前状态: REVIEW_RANGE

逻辑运算符

逻辑运算符用于组合多个条件

运算符 描述 含义
and 逻辑与 AB都为True
or 逻辑或 AB至少一个为True
not 逻辑非 A的否定

优先级not > and > or

逻辑运算符在复杂交易条件中的应用

Listing 3: 逻辑运算符在复杂交易条件中的应用
展开完整代码
# =============================================================================
# 题目:使用逻辑运算符构建复合交易条件
# =============================================================================
# 本代码演示如何使用and、or、not逻辑运算符组合多个技术指标:
# - and运算符:所有条件同时满足时满足条件(严谨的交易信号)
# - or运算符:任一条件满足时满足条件(风险预警场景)
# - not运算符:对条件取反(排除特定情况)
# 这种多条件组合是量化交易策略的核心技术

# ==================== 定义市场数据 ====================
price = 18.50  # 当前股价
volume = 1500000  # 成交量(单位:手)
ma20 = 18.00  # 20日均线价格
rsi = 65  # RSI相对强弱指标(范围0-100)
stop_loss = 15.00  # 止损价格

# ==================== 复合条件1:价格突破且放量 ====================
if price > ma20 and volume > 1000000:  # 检查价格与成交量的课堂组合条件
    print("RULE_A:价格与成交量条件同时命中")  # 只输出中性规则标签
    # and运算符确保两个条件必须同时为真,不表示金融建议可靠性

# ==================== 复合条件2:超买或超卖预警 ====================
if rsi > 70 or rsi < 30:  # RSI超买(>70)或超卖(<30)
    print("警示:RSI进入极端区域")  # 提示市场可能即将反转
    # or运算符在任一条件满足时就满足条件,适合预警场景

# ==================== 复合条件3:严格的核对条件 ====================
# 价格在均线之上 AND RSI不超买 AND 成交量放大
review_condition = (price > ma20) and (rsi < 70) and (volume > 1000000)
if review_condition:  # 三个条件必须同时满足
    print("REVIEW:三项课堂条件同时命中")  # 多重命中仍须验证基线、成本与误判

# ==================== 使用not运算符 ====================
if not (price < stop_loss):  # 等价于:price >= stop_loss
    print("CLEAR:未满足条件下侧课堂边界")  # not运算符对条件取反
    # 在这个场景中,not使得代码逻辑更符合自然语言表达
RULE_A:价格与成交量条件同时命中
REVIEW:三项课堂条件同时命中
CLEAR:未满足条件下侧课堂边界

短路求值(Short-circuit Evaluation)

Python的 andor 采用短路求值

  • A and B:如果A为False,不计算B(结果必为False)
  • A or B:如果A为True,不计算B(结果必为True)

这在金融编程中可以防止错误

短路求值的防御性编程应用

Listing 4: 短路求值在防止错误中的应用
展开完整代码
# =============================================================================
# 题目:利用短路求值避免访问不存在的数据
# =============================================================================
# 本代码演示Python逻辑运算符的短路求值特性:
# - and运算符:第一个表达式为False时,第二个表达式不会被计算
# - or运算符:第一个表达式为True时,第二个表达式不会被计算
# 在金融数据处理中,这可以防止访问None对象或空数据引发的错误
# 这是防御性编程的重要技巧,在实际开发中经常使用

# ==================== 场景设置 ====================
data = None  # 数据可能缺失(模拟API返回数据为空的情况)

# ==================== 安全的检查:利用短路求值 ====================
if data is not None and data.price > 100:  # 先检查data不为None
    print("价格高于100")  # 只有data不为None时才会访问data.price
    # 短路求值机制:如果data is not None为False,
    # Python不会计算and后面的data.price > 100,
    # 从而避免AttributeError错误

# ==================== 危险的写法(会报错) ====================
# if data.price > 100 and data is not None:
#     print("价格高于100")
# 上面这行代码会导致错误: AttributeError: 'NoneType' object has no attribute 'price'
# 原因:当data为None时,Python会尝试计算data.price,立即报错
# 教训:必须先判断对象存在性,再访问其属性

运行前预测|实战案例:止盈止损交易条件单

  • 输入预测:运行前先写出 price 的业务含义、数据类型或取值范围,并判断哪一个输入最可能改变结果。
  • 结果预测:受保护块会产生固定平台文本;先预测命中哪个分支,并明确该文本只用于语法判题、不构成建议。
  • 完成要求:能独立说明本任务从输入到“实战案例:止盈止损交易条件单”结果的关键步骤,原样录入平台代码并得到可核对的运行结果。

⭐ 实战案例:止盈止损交易条件单

# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
price=14.88  # 设置当前股价为14.88元
if price>=17:  # 判断股价是否达到止盈线(17元)
  print("卖出股票,止盈")  # 股价达到止盈线,输出卖出建议
elif price<=13:  # 判断股价是否跌破止损线(13元)
  print("卖出股票,止损")  # 股价跌破止损线,输出止损建议
else:  # 股价在13-17元区间内
  print("继续持有")  # 股价处于合理区间,输出继续持有建议

任务复盘|实战案例:止盈止损交易条件单

平台练习说明:受保护输出只检查 if/elif/else 语法,13/17 元是课堂示例,不是估值或交易阈值。真实系统只能输出 ALERT/REVIEW/需要检查,还需数据时效、权限、交易成本、流动性、涨跌停/停牌与风控负责人批准。

拓展练习:只改变一个关键输入或业务场景,先预测输出如何变化,再运行验证并解释变化原因。

止盈止损策略的深度解析

if-elif-else 的执行逻辑

  • Python从上到下依次检查条件
  • 一旦某个条件为True,执行对应代码块后跳出
  • 最多只有一个分支被执行

课堂状态的含义

  • 目标价分支:进入人工核对,不自动卖出
  • 止损线分支:进入风控核对,不宣称必须平仓
  • 区间分支:记录状态,不把任意价格区间解释为估值高低

风险管理原则

止盈止损的核心要点:

  • 阈值、数据时点、成本和权限必须事先登记
  • 程序只给出课堂判断结果,不能自动执行交易
  • 任何盈亏比规则都须由策略目标、样本外检验和风险预算支持

课堂分支区间:固定文本与处理状态

课堂条件分支区间 展示两个假设边界、当前示例中的数值以及对应的人工核对状态 下侧分支:ALERT 中间分支:REVIEW 上侧分支:ALERT 13元 17元 当前价 14.88元

多条件规则:多字段状态判断顺序

Listing 5: 基于多指标的复合交易策略
展开完整参考实现
# =============================================================================
# 题目:多因子量化交易策略系统
# =============================================================================
# 本代码实现一个基于多个技术指标的复合交易策略:
# 1. 均线系统 - 判断趋势方向
# 2. 成交量分析 - 验证价格走势的可靠性
# 3. RSI指标 - 判断超买超卖状态
# 综合三个指标演示条件组合;是否有效必须由样本外回测检验
# 本页仅提供规则语法示例数据,不发布任何投资动作或胜率结论

# ==================== 导入数值计算库 ====================
import numpy as np  # 导入NumPy库用于数值计算

# ==================== 确定性课堂规则示例数据 ====================
price = 28.50  # 设置无真实资产含义的课堂价格
ma20 = 28.00  # 设置课堂短期均线示例数据
ma60 = 27.50  # 设置课堂长期均线示例数据
volume = 2500000  # 设置课堂成交量示例数据
avg_volume = 2000000  # 设置课堂平均成交量示例数据
rsi = 58  # 设置课堂RSI示例数据

# ==================== 课堂规则:多字段条件 ====================
rule_a_count = 0  # 规则A命中计数器
alert_count = 0  # 提醒条件命中计数器

多条件规则 1/3:趋势与成交量

Listing 6
展开趋势与成交量条件
# ==================== 条件1:均线系统分析 ====================
if ma20 > ma60:  # 判断短期均线是否在长期均线之上
    print("✓ 均线多头排列")  # 多头排列表示上升趋势
    rule_a_count += 1  # 规则A计数加1
else:  # 短期均线在长期均线之下
    print("✗ 均线空头排列")  # 空头排列表示下降趋势
    alert_count += 1  # 提醒计数加1
# 均线系统是趋势跟踪的基础技术指标

# ==================== 条件2:成交量分析 ====================
if volume > avg_volume * 1.2:  # 成交量比平均值高20%
    print("✓ 放量上涨")  # 放量上涨表明资金流入,趋势可靠
    rule_a_count += 1  # 规则A计数加1
elif volume < avg_volume * 0.8:  # 成交量比平均值低20%
    print("✗ 缩量下跌")  # 缩量下跌表明市场缺乏承接
    alert_count += 1  # 提醒计数加1
# 成交量条件是否有增量信息需要样本外核对
✓ 均线多头排列
✓ 放量上涨

多条件规则 2/3:RSI 条件

Listing 7
展开RSI条件
# ==================== 条件3:RSI指标分析 ====================
if 40 <= rsi <= 60:  # RSI在40-60的中性区域
    print("✓ RSI处于中性区域")  # 只记录课堂区间
    rule_a_count += 1  # 规则A计数加1
elif rsi > 70:  # RSI超过70,进入超买区
    print("✗ RSI超买")  # 超买可能预示回调
    alert_count += 1  # 提醒计数加1
elif rsi < 30:  # RSI低于30,进入超卖区
    print("✗ RSI超卖")  # 超卖可能预示反弹
    alert_count += 1  # 提醒计数加1
# RSI阈值只作语法演示,不假定具有稳定预测能力
✓ RSI处于中性区域

多条件规则 3/3:依据分流

Listing 8
展开规则分流结果
# ==================== 综合决策输出 ====================
print(f"\nRULE_A命中数: {rule_a_count}")  # 显示规则A累计命中数
print(f"ALERT命中数: {alert_count}")  # 显示提醒条件累计命中数

# ==================== 最终交易建议 ====================
if rule_a_count >= 2 and alert_count == 0:  # 至少2个规则A且无提醒条件
    print("\n课堂分流: 进入样本外核对")  # 仅进入检验队列而非直接交易
elif alert_count >= 2:  # 至少2个提醒条件
    print("\n课堂分流: 进入风险核对")  # 仅进入核对队列而非直接交易
else:  # 信号不明确或买卖信号混杂
    print("\n课堂分流: 依据不足")  # 记录规则依据不足状态
# 只有时间留出回测、成本压力测试与另行核对通过后才可讨论采用

RULE_A命中数: 3
ALERT命中数: 0

课堂分流: 进入样本外核对

条件表达式(三元运算符)

语法value_if_true if condition else value_if_false

# 传统写法(5行)
if price > 20.0:
    status = '高'
else:
    status = '低'

# 条件表达式(1行)
status = '高' if price > 20.0 else '低'

一行完成相同逻辑,代码更加 Pythonic

条件表达式的金融应用

Listing 9: 条件表达式的简洁写法
展开完整代码
# =============================================================================
# 题目:条件表达式(三元运算符)的金融应用
# =============================================================================
# 本代码演示Python的条件表达式语法:
# - 传统if-else语句:适合多行代码块
# - 条件表达式:适合简单的单行赋值,代码更简洁
# 条件表达式在金融计算中广泛使用,特别是费率计算、状态判断等场景
# 掌握这个语法可以让代码更加Pythonic(符合Python风格)

# ==================== 定义变量 ====================
price = 18.50  # 当前股价

# ==================== 传统写法(if-else语句) ====================
if price > 20.0:  # 判断价格是否高于20元
    status = "高"  # 条件为真时赋值
else:  # 价格不高于20元
    status = "低"  # 条件为假时赋值
# 这种写法需要5行代码,逻辑分散

# ==================== 条件表达式(简洁写法) ====================
status = "高" if price > 20.0 else "低"  # 一行完成相同逻辑
# 语法结构: 值1 if 条件 else 值2
# 如果条件为True返回值1,否则返回值2

print(f"价格水平: {status}")  # 输出: "价格水平: 低"

# ==================== 嵌套条件表达式 ====================
level = "高" if price > 20 else ("中" if price > 15 else "低")
# 这个嵌套结构等价于:
# if price > 20:
#     level = "高"
# elif price > 15:
#     level = "中"
# else:
#     level = "低"

print(f"详细分级: {level}")  # 输出: "详细分级: 中"

# ==================== 金融应用:计算手续费 ====================
amount = 15000  # 交易金额(元)
# 根据交易金额选择不同的费率
commission_rate = 0.0003 if amount > 10000 else 0.0005
# 金额超过1万元,费率0.03%;否则费率0.05%

commission = amount * commission_rate  # 计算手续费
print(f"手续费: {commission:.2f}元")  # 输出: "手续费: 4.50元"
# 条件表达式使得费率选择逻辑清晰且在一行内完成
价格水平: 低
详细分级: 中
手续费: 4.50元

嵌套If语句:分层决策

在复杂决策中,可能需要嵌套if语句

  • 外层:判断市场趋势(上涨/下跌/震荡)
  • 中层:判断波动率(高/中/低)
  • 内层:判断价格位置

这种分层结构模仿了交易员的思维过程

嵌套If语句示例

Listing 10: 嵌套if语句处理复杂决策逻辑
展开完整代码
# =============================================================================
# 题目:嵌套条件语句实现分层交易决策
# =============================================================================
# 本代码演示如何使用嵌套if语句处理复杂的分层决策:
# 外层判断市场趋势,中层判断波动率,内层判断价格位置
# 这种分层决策结构模仿了人类交易员的思维过程
# 适合处理需要多个维度综合判断的金融决策场景

# ==================== 定义市场状态变量 ====================
price = 18.50  # 当前股价
market_trend = "up"  # 市场趋势: up(上涨), down(下跌), sideways(震荡)
volatility = "high"  # 波动率: low(低), medium(中), high(高)

# ==================== 外层:判断市场趋势 ====================
if market_trend == "up":  # 如果市场处于上涨趋势
    # ==================== 中层:判断波动率 ====================
    if volatility == "low":  # 低波动环境
        # ==================== 内层:判断价格位置 ====================
        if price > 20:  # 价格已经较高
            action = "REVIEW_HIGH_RANGE"  # 进入高区间核对状态
        else:  # 价格适中
            action = "RULE_A"  # 记录规则A命中
    elif volatility == "medium":  # 中等波动
        action = "REVIEW_MEDIUM_VOL"  # 进入中波动核对状态
    else:  # 高波动(volatility == "high")
        action = "ALERT_HIGH_VOL"  # 输出高波动提醒

elif market_trend == "down":  # 如果市场处于下跌趋势
    if volatility == "low":  # 低波动下跌
        action = "REVIEW_LOW_VOL"  # 输出低波动核对状态
    else:  # 中高波动下跌
        action = "ALERT_DOWNTREND"  # 输出下行提醒

else:  # market_trend == "sideways",震荡市场
    action = "REVIEW_SIDEWAYS"  # 输出横盘核对状态

# ==================== 输出决策报告 ====================
print(f"市场趋势: {market_trend}")  # 显示市场趋势
print(f"波动率: {volatility}")  # 显示波动率水平
print(f"当前价格: {price:.2f}元")  # 显示当前价格
print(f"规则状态: {action}")  # 显示最终中性状态
# 输出只进入课堂核对队列,不授权任何金融行动
市场趋势: up
波动率: high
当前价格: 18.50元
规则状态: ALERT_HIGH_VOL

控制嵌套复杂度的重构方法

嵌套超过3层时应考虑重构:

方法1:提前返回(Early Return)

def choose_action(volatility, market_trend):  # 把提前返回顾入可调用函数
    if volatility == 'high' and market_trend != 'up':  # 检查高波动且非上涨的提前返回条件
        return '观望为主'  # 高波动且非上涨时立即停止后续分支
    if market_trend == 'up':  # 检查上涨趋势分支
        return '进入上涨趋势规则'  # 上涨时返回待细化的规则入口
    return '维持观察'  # 其余情形给出明确默认动作

方法2:提取为独立函数

def check_uptrend_strategy(price, volatility):
    if volatility == 'low':
        return 'REVIEW_HIGH_RANGE' if price > 20 else 'RULE_A'
    # ...

真值测试(Truth Value Testing)

在if语句中,任何对象都可以进行布尔测试:

Falsy值(视为False):

  • NoneFalse
  • 数值 000.00j
  • 空序列(''()[]{}

Truthy值(视为True):

  • 所有其他非零、非空值

真值测试在数据验证中的应用

Listing 11: 真值测试在数据验证中的应用
展开完整代码
# =============================================================================
# 题目:真值测试在金融数据验证中的应用
# =============================================================================
# 本代码演示Python的真值测试机制:
# 在if语句中,任何对象都可以被隐式转换为布尔值
# 空容器、0、None等被视为False,非空和非零值被视为True
# 这种特性使得代码非常简洁,是Pythonic编程风格的重要体现
# 在金融数据处理中,常用于快速验证数据是否存在或有效

# ==================== 场景1:检查投资组合是否为空 ====================
portfolio = []  # 定义一个空的投资组合列表

if portfolio:  # 直接使用列表作为条件(等价于 len(portfolio) > 0)
    print("投资组合不为空")  # 列表非空时执行
else:  # 列表为空
    print("投资组合为空")  # 列表为空时执行
# 输出: "投资组合为空"
# 这种写法比 if len(portfolio) == 0: 更Pythonic

# ==================== 场景2:检查价格是否有效 ====================
price = 0  # 定义价格为0

if price:  # 数值0在布尔测试中为False
    print("有效价格")  # 非零价格时执行
else:  # 价格为0
    print("无效价格")  # 零价格时执行
# 输出: "无效价格"
# 在金融数据中,0可能表示数据缺失或停牌

# ==================== 场景3:检查股票代码是否存在 ====================
stock_code = ""  # 定义空字符串

if stock_code:  # 空字符串在布尔测试中为False
    print(f"股票代码: {stock_code}")  # 有代码时输出
else:  # 字符串为空
    print("股票代码缺失")  # 无代码时输出
# 输出: "股票代码缺失"
# 这种写法比 if stock_code == "": 更简洁

# ==================== 场景4:检查数据是否为None ====================
data = None  # 定义None对象(表示数据缺失)

if data is not None:  # 必须使用 is not None 来判断
    print("处理数据")  # 数据存在时执行
else:  # 数据为None
    print("数据缺失")  # 数据缺失时执行
# 输出: "数据缺失"
# 注意:判断None必须用 is 或 is not,不能用 == 或 !=
# 这是因为None是Python的单例对象,使用is判断更准确
投资组合为空
无效价格
股票代码缺失
数据缺失

本章小结

知识点 核心内容
If语句 三种结构:if / if-else / if-elif-else
比较运算符 ==!=<><=>=
逻辑运算符 andornot,优先级:not > and > or
短路求值 防御性编程的重要技巧
条件表达式 值1 if 条件 else 值2 一行搞定
嵌套If 分层决策,超过3层应重构
真值测试 Falsy/Truthy,Pythonic数据验证

随堂练习

  • 问题 1|需要准备哪些数据?:当前价、成本价、止盈止损阈值和趋势/成交量/RSI条件。
  • 问题 2|需要完成哪些操作?:运行 lst-multi-condition-decision,用 if/elif/else 形成互斥核对状态。
  • 问题 3|应得到哪些结果?:条件真值表、最终状态和命中分支。
  • 问题 4|怎样确认结果可靠?:测试阈值两侧与等号点;输入缺失或规则重叠时先检查原因。
  • 问题 5|换一个情境,怎样继续应用?:把同一分支结构拓展应用到中国股票风控提醒。
  • 作答提示:请依次写清所用数据、分析过程、所得结果、核对方法和拓展思考。课程所需数据见前言中的下载入口;教学平台固定题按页面说明完成。

教师参考解答|答案与说明 1

  • 所用数据与字段:教学最小输入:中性当前值、基准值、上下界与数据核验状态
  • 解答示例|上下界核对判断顺序(平台保护块之外):

教师参考解答|代码 1

展开代码(代码区可独立滚动)
def route_threshold_state(current_value,base_value,upper_rate,lower_rate,is_validated):  # 定义中性上下界判断顺序
    relative_change=current_value/base_value-1  # 计算相对基准变化率
    if not is_validated:  # 优先执行数据核验检查要求
        return '需要检查'  # 未核验时暂停后续流程
    if relative_change>=upper_rate:  # 判断是否达到上侧课堂边界
        return 'ALERT_UPPER'  # 返回上侧提醒状态
    if relative_change<=-lower_rate:  # 判断是否达到下侧课堂边界
        return 'ALERT_LOWER'  # 返回下侧提醒状态
    return 'REVIEW'  # 未越界时保持核对状态
test_values=[112.0,92.0,103.0]  # 覆盖上侧、下侧和中间三条分支
states=[route_threshold_state(value,100.0,0.10,0.05,True) for value in test_values]  # 批量验证分支
assert states==['ALERT_UPPER','ALERT_LOWER','REVIEW']  # 另行核对边界行为
print(states,route_threshold_state(112.0,100.0,0.10,0.05,False))  # 输出状态与数据检查要求

教师参考解答|答案与说明 2

  • 解释答案:条件结构把互斥课堂规则按优先级转成便于核对路径,数据检查必须先于判断顺序;输出只进入人工核对,不代表价格变化的因果解释或投资建议。
  • 拓展应用答案:将输入替换为长三角企业库存预警,真值判断条件改为“字段齐全且负责人批准”;预期缺字段时一律 需要检查;用四条分支测试验证。
  • 参考结果:三个数值依次为 ALERT_UPPER/ALERT_LOWER/REVIEW;未核验为 需要检查
  • 边界 / 局限:课堂阈值未做业务校准,只能演示分支
  • 常见错误:遗漏下侧分支;比较顺序覆盖边界;数据准备条件检查置后